Generally, a software library module (herein called a “library”), a collection of software routines, is formed so that software routines can be used by a plurality of applications without rewriting the software routines for each application. There may be a plurality of libraries and each library can be either shared or non-shared. A shared library is one which can be used by more than one application. A non-shared library is one which is only used by the application that calls it. Traditionally, shared libraries are dynamically loaded during runtime, while non-shared libraries are linked into a program during creation of the program's executable file.
Some systems dynamically load libraries which are needed by applications or other software modules. For example, when loading a particular software application or module, herein denoted as “Software A” for illustrative purposes only, these systems check whether there are any libraries which will be needed in order to execute Software A. These systems then load those needed libraries into memory, load Software A into memory and begin execution of Software A. The libraries remain loaded in memory until execution of Software A completes. After the execution of Software A is complete, Software A and the loaded libraries are unloaded from memory.
The loaded libraries in the above example occupy memory space during the entire execution of Software A, regardless of whether Software A uses them all of the time. Even if Software A were to use a particular library for only a fraction of the execution time of Software A, that particular library would remain loaded in memory for the entire execution of Software A, resulting in an undesirable waste of memory resources.
Thus, depending on the amount of usage of a library by a particular application or module, the above approach undesirably results in inefficient use of memory resources. It is desirable therefore, to provide a mechanism, which is capable of loading libraries in a manner which promotes efficient use of memory resources.